//package com.ruoyu.cloud.ai.service;
//
//import com.ruoyu.cloud.ai.splitter.QjcTextSplitter;
//import org.springframework.ai.document.Document;
//import org.springframework.ai.reader.TextReader;
//import org.springframework.ai.vectorstore.RedisVectorStore;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.core.io.Resource;
//import org.springframework.stereotype.Component;
//
//import java.util.List;
//
//import org.springframework.ai.vectorstore.SearchRequest;
//
///**
// * TokenTextSplitter的工作原理：
// * <p>
// * 先将文本encode为tokens
// * 按指定的chunkSize（默认为800）对tokens进行切分，得到一个chunk
// * 将chunk进行decode，得到原始文本
// * 获取原始文本中最后一个’.‘、’?‘、’!‘、’\n’的位置，该位置表示一段话的结束。
// * 如果结束位置超过了minChunkSizeChars，那么则进行切分得到一段话的chunk，否则不切分
// * 将切分后的chunk记录到一个List中
// * 然后跳转到第二步，处理剩余的tokens
// */
//@Component
//public class DocumentSverice {
//
//    @Value("classpath:meituan-qa.txt")
//    private Resource resource;
//    @Autowired
//    private RedisVectorStore vectorStore;
//
//    public List<Document> loadText() {
//        TextReader textReader = new TextReader(resource);
//        textReader.getCustomMetadata().put("filename", "meituan-qa.txt");
//        List<Document> documents = textReader.get();
//
//        //TokenTextSplitter tokenTextSplitter = new TokenTextSplitter();
//        // List<Document> list = tokenTextSplitter.apply(documents);
//        QjcTextSplitter qjcTextSplitter = new QjcTextSplitter();
//        List<Document> list = qjcTextSplitter.apply(documents);
//
//        //向量存储
//        vectorStore.add(list);
//        return list;
//    }
//
//    /**
//     * 向量搜索
//     *
//     * @param message
//     * @return
//     */
//    public List<Document> search(String message) {
//        List<Document> documents = vectorStore.similaritySearch(message);
//        return documents;
//    }
//
//    /**
//     * 元数据搜索
//     *
//     * @param message
//     * @param question
//     * @return
//     */
//    public List<Document> metadataSearch(String message, String question) {
//        return vectorStore.similaritySearch(
//                SearchRequest.builder()
//                        .query(message)
//                        .similarityThreshold(0.1)
//                        .filterExpression(String.format("question in ['%s']", question))
//                        .topK(5)
//                        .build());
//    }
//}
